home *** CD-ROM | disk | FTP | other *** search
/ Chip: Internet / Chip Internet.iso / wwwutil / hotjava.ins / hotjava.exe / hotjava / classsrc / browser / tools / JavaSearch / DocList.java < prev    next >
Text File  |  1995-08-11  |  5KB  |  144 lines

  1. /*
  2.  * @(#)DocList.java    1.10 95/03/14 David A. Brown
  3.  *
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19.  
  20. package browser.tools.JavaSearch;
  21. //import Doc;
  22.  
  23. import java.util.Vector;
  24. import java.io.*;
  25.  
  26. /**
  27.  * DocList:  a list of Documents 
  28.  *
  29.  * Basically a collection of Doc objects, along with some
  30.  * functionality to manipulate them.
  31.  */
  32. class DocList {
  33.  
  34.     /** All the Docs in thie DocList.  This is a Vector of Doc objects */
  35.     private Vector entries;
  36.  
  37.     /** Header ('magic number') at top of docs file */
  38.     static final String docsFileHeader = "JavaSearch-docs";
  39.  
  40.     /** Basic constructor; create an empty doclist */
  41.     public DocList() {
  42.     //System.out.println("DocList constructor...");
  43.     entries = new Vector();
  44.     }
  45.  
  46.     /** 
  47.      *  Create a DocList full of Docs, to be loaded from the specified
  48.      *  Database, using the Doc IDs in 'idvector'.
  49.      */
  50.     public DocList(Database db, IDVector idvector) {
  51.     this();
  52.     //System.out.println("DocList constructor, from DB "+db.dbName+
  53.     //     ".  Creating "+idvector.count+" docs; idvector's capacity is "+idvector.ids.length+"...");
  54.  
  55.     // Open .docs and .docindex files: 
  56.     RandomAccessFile docsFile =
  57.         new RandomAccessFile(db.docsFilename,"r");
  58.     RandomAccessFile docindexFile =
  59.         new RandomAccessFile(db.docindexFilename,"r");
  60.  
  61.     for (int i=0; i<idvector.count; i++) {
  62.         char docid = idvector.ids[i];
  63.         Doc newdoc = new Doc(docid, docsFile, docindexFile);
  64.         addDoc(newdoc);
  65.     }
  66.  
  67.     docsFile.close();
  68.     docindexFile.close();
  69.     }
  70.  
  71.     /** Add a Doc object to the end of our list.  */
  72.     public void addDoc(Doc doc) {
  73.     entries.addElement(doc);
  74.     }
  75.  
  76.     /** Get a specified Doc out of our list */
  77.     public Doc getDocAt(int i) {
  78.     return (Doc)entries.elementAt(i);
  79.     }
  80.  
  81.     /** Return the size of (number of Docs in) this DocList */
  82.     public int size() {
  83.     return entries.size();
  84.     }
  85.  
  86.     /** Dump out the full contents of this DocList */
  87.     public void dump() {
  88.     //System.out.println("DocList.dump():  This doc list contains "+entries.size()+" Doc"+((entries.size()==1)?"":"s")+".");
  89.  
  90.     for (int i=0; i<entries.size(); i++) {
  91.             Doc d = (Doc)entries.elementAt(i);
  92.         //System.out.println(" Doc # "+i+"\t"+d);
  93.         }
  94.     System.out.println("-----");
  95.     }
  96.  
  97.     /** 
  98.      * Save this DocList to disk, as part of the database 'db'.
  99.      */
  100.     public void saveAs(Database db) {
  101.     System.out.println("DocList.saveAs()...");
  102.  
  103.     // REMIND:  maybe have a sanity check here to ensure
  104.     //   that all the IDs of docs in the list are in
  105.     //   order, with no IDs skipped or duplicated?
  106.  
  107.     // Open two output streams (docs + docindex).
  108.     // Write each Doc to the .docs file, and for
  109.     //   each one add a position entry to the .docindex file.
  110.     //
  111.     System.out.println("Opening docs file '" + db.docsFilename + "'...");
  112.     FileOutputStream fileout = new FileOutputStream(db.docsFilename);
  113.     DataOutputStream out = new DataOutputStream(fileout);
  114.     //
  115.     System.out.println("Opening docindex file '" + db.docindexFilename + "'...");
  116.     FileOutputStream docfileout = new FileOutputStream(db.docindexFilename);
  117.     DataOutputStream docout = new DataOutputStream(docfileout);
  118.  
  119.     // Write some header info.
  120.     // Future:  version numbers?  other db or index info?
  121.     out.writeBytes(docsFileHeader);
  122.     out.writeByte('\n');
  123.  
  124.     // Write a dummy int to the docindex file, since there's
  125.     //    no doc ID zero!
  126.     docout.writeInt(0);
  127.  
  128.     // Ok, just write every Doc in order...
  129.     for (int i=0; i<entries.size(); i++) {
  130.             int outPos = out.size();
  131.             Doc d = (Doc)entries.elementAt(i);
  132.         d.writeToStream(out);
  133.         // Write the docindex record
  134.             docout.writeInt(outPos);
  135.     }
  136.     int docsSize = out.size();
  137.     fileout.close();
  138.     docfileout.close();
  139.     System.out.println("Wrote docs file ("+docsSize+" bytes).");
  140.     }
  141.  
  142.  
  143. }
  144.